package com.example.warehouse_management.config;

import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;

/**
 * 验证码生成工具Kaptcha的配置类
 * 用于自定义验证码的样式、文本规则等属性，并将配置好的验证码生成器注册为Spring Bean
 */
@Configuration // 标识该类为Spring配置类，会被Spring容器扫描并加载配置
public class CaptchaConfig {

    /**
     * 配置并创建验证码生成器的Bean实例
     * 该Bean将被注入到需要生成验证码的组件中（如LoginController），用于生成指定规则的验证码图片
     *
     * @return 配置完成的DefaultKaptcha实例，实现了Producer接口
     */
    @Bean(name = "captchaProducer") // 定义Bean名称为"captchaProducer"，与注入时的名称对应
    public DefaultKaptcha getKaptchaBean() {
        // 创建DefaultKaptcha实例，这是Kaptcha提供的默认验证码生成器实现
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();

        // 创建Properties对象存储验证码的配置参数
        Properties properties = new Properties();

        // 1. 边框设置
        properties.setProperty("kaptcha.border", "yes"); // 是否显示边框（yes/no），默认true
        properties.setProperty("kaptcha.border.color", "105,179,90"); // 边框颜色，使用RGB值（此处为绿色系）

        // 2. 文本字符设置
        properties.setProperty("kaptcha.textproducer.font.color", "blue"); // 验证码文本颜色（此处为蓝色）
        properties.setProperty("kaptcha.textproducer.char.length", "4"); // 验证码文本长度（默认5，此处改为4位）
        properties.setProperty("kaptcha.textproducer.char.space", "4"); // 字符之间的间距（默认2，此处增大间距）
        properties.setProperty("kaptcha.textproducer.font.names", "Arial,Courier"); // 文本字体（支持多个字体，用逗号分隔）
        properties.setProperty("kaptcha.textproducer.font.size", "32"); // 文本字体大小（默认40，此处改为32）

        // 3. 图片尺寸设置
        properties.setProperty("kaptcha.image.width", "120"); // 验证码图片宽度（默认200，此处缩小为120px）
        properties.setProperty("kaptcha.image.height", "40"); // 验证码图片高度（默认50，此处缩小为40px）

        // 4. 其他设置
        properties.setProperty("kaptcha.session.key", "kaptchaCode"); // 存储验证码文本的Session键名（用于后端验证时获取）
        properties.setProperty("kaptcha.noise.color", "gray"); // 噪点颜色（默认黑色，此处改为灰色，降低干扰）

        // 将配置参数封装为Config对象，并应用到DefaultKaptcha实例
        Config config = new Config(properties);
        defaultKaptcha.setConfig(config);

        // 返回配置完成的验证码生成器
        return defaultKaptcha;
    }
}